/*****************************************************************
File name   : api_alarm.h
Author      : liukaihua 
Version     : Ver1.0.0
Date        : 2022-01-26
Description : 关于报警的处理
Others      : 
History     : 
    1. Date:
       Author: ID:
       Modification:
    2. ...
*****************************************************************/

#ifndef __API_ALARM_H_
#define __API_ALARM_H_

#include "stdint.h"

/****************************************************************************/ 

#define PHY_NUM  4
#define EQU_NUM  67//69//20240422   32//20220627  31//20220422增加一个设备运行中断报警    30//24

#define NORMAL_STATUS  0
#define SILENCE_STATUS 1
#define SUSPEND_STATUS 2


#pragma pack(1)/*指定按1字节对齐*/
typedef struct
{
//		uint16_t htbk_con;
//		uint16_t htbk_win_con;//风机同上复用
//    uint16_t ArmBlanket1_con;
//    uint16_t ArmBlanket2_con;
    uint16_t UpperBlanket_con;
    uint16_t LowBlanket_con;
    uint16_t FT_con;//FT1_con;
//    uint16_t FT2_con;
    uint16_t ArmBlanket_con;
    uint16_t blood1_con;
    uint16_t blood2_con;
    uint16_t InfusePress1_con;
    uint16_t InfusePress2_con;
//    uint16_t ehp_con;
//    uint16_t ft_con;
    uint16_t ear_temp_con;
//    uint16_t axi_temp_con;
    uint16_t sys_con;
    uint16_t all_silence_con;//永久的静音控制
    uint16_t ear_silence_con;//永久的人体温度报警静音控制
}ALARM_CON_SET_T;//报警控制开关设置

typedef struct
{
	uint16_t silence_con; //静音控制
	uint16_t key_v_con; //按键音控制
	uint16_t voice_grade; //报警音量等级
	
	uint16_t ble_isconn; //ble耳温蓝牙断开控制
	uint16_t suspend_con; //报警暂定控制
}LCD_EASYCON_WITH_T;//与声音参数相关的lcd开关设置
/*-----------------------------------------------------------*/
/*生理报警参数*/
typedef struct
{
		uint16_t ear_h;//耳温上限值
		uint16_t ear_l;//耳温下限值
//		uint16_t axi_h;//腋温上限值
//		uint16_t axi_l;//腋温下限值
}ALARM_PHY_PARM_T;

/*设备报警参数*/
//typedef struct
//{
//		uint8_t net_pwr, //网电源故障参数
//		uint8_t
//}ALARM_EQU_PARM_T;

#pragma pack()/*取消指定对齐，恢复缺省对齐*/
/*-----------------------------------------------------------*/
/*生理报警的所有状态*/
//typedef enum __ALARM_PHY_STATE_t
//{
//		EAR_TEMP_H = 0,//耳温过高
//		EAR_TEMP_L ,//耳温过低
//		AXI_TEMP_H ,//腋温过高
//		AXI_TEMP_L ,//腋温过低
//		
//}ALARM_PHY_STATE_t;
/*-----------------------------------------------------------*/

///*设备 电热毯 足温垫 升温毯 输液1 输血2 报警的所有状态*/
//typedef enum __ALARM_EQU_STATE_t
//{
//		NETPOWER_FAULT =0 , //网电源故障？
//	
//		EHP_SENSOR_FAULT ,//传感器损坏或断开
//		EHP_HEAT_FAULT , //加热器控制电路故障
//		EHP_TEMP_H ,         //温度误差超温设定值1度
//		EHP_TEMP_L ,         //温度误差低于设定值1度
//	
//		FT_SENSOR_FAULT ,		//传感器损坏或断开
//		FT_HEAT_FAULT , 		//加热器控制电路故障
//		FT_TEMP_H ,         //温度误差超温设定值1度
//		FT_TEMP_L ,         //温度误差低于设定值1度
//	
//		HP_SENSOR_FAULT ,//传感器损坏或断开
//		HP_TEMP_HH ,         //高温报警  温度持续1分钟超过47度
//		HP_TEMP_H ,        //温度偏高报警  温度持续3分钟超过设定值1度
//		HP_TEMP_L ,        //温度偏低报警  温度持续3分钟低于设定值1度
//		HP_TEMP_LL ,        //加温故障报警 低温报警  温度持续3分钟低于32度
//	
//		BLOOD1_SENSOR_FAULT ,//传感器损坏或断开
//		BLOOD1_TEMP_HH ,         //高温报警  温度持续1分钟超过47度
//		BLOOD1_TEMP_H ,        //温度偏高报警  温度持续3分钟超过设定值1度
//		BLOOD1_TEMP_L ,        //温度偏低报警  温度持续3分钟低于设定值1度
//		BLOOD1_TEMP_LL ,        //加温故障报警 低温报警  温度持续3分钟低于32度
//	
//		BLOOD2_SENSOR_FAULT ,//传感器损坏或断开
//		BLOOD2_TEMP_HH ,         //高温报警  温度持续1分钟超过47度
//		BLOOD2_TEMP_H ,        //温度偏高报警  温度持续3分钟超过设定值1度
//		BLOOD2_TEMP_L ,        //温度偏低报警  温度持续3分钟低于设定值1度
//		BLOOD2_TEMP_LL ,        //加温故障报警 低温报警  温度持续3分钟低于32度
//		
//}ALARM_EQU_STATE_t;

/*-----------------------------------------------------------*/
/*7个温度数据显示*/
typedef enum __TEMP_PARM_t
{
		EAR_TEMP_C = 0,
		AXI_TEMP_C ,
		EHP_TEMP_C ,
		FT_TEMP_C ,
		HP_TEMP_C ,
		BLOOD1_TEMP_C ,
		BLOOD2_TEMP_C ,
}TEMP_PARM_t;

/**************传感器未接入状态结构体*****************/
typedef struct
{
//	uint8_t ehp;
//	uint8_t ft;
	uint8_t blood1;
	uint8_t blood2;
    uint8_t InfusePress1;
    uint8_t InfusePress2;
    uint8_t ArmBlanket1; 
    uint8_t ArmBlanket2; 
    uint8_t UpperBlanket;
    uint8_t LowBlanket;  
    uint8_t FT1;   	
    uint8_t FT2;
//	uint8_t htbk;
}Equ_Fault_STA_T;//SENSOR_STA_t;

///**************判断断路器故障状态结构体*****************/
//typedef struct
//{
//	uint8_t ehp;
//	uint8_t ft;
//	uint8_t blood1;
//	uint8_t blood2;
//	uint8_t ehp_cnt;//热断器报警次数累加
//	uint8_t ft_cnt;
//	uint8_t blood1_cnt;
//	uint8_t blood2_cnt;
////	uint8_t htbk;
//}BREAK_STA_t;

///**************判断短路或过载故障状态结构体*****************/
//typedef struct
//{
//	uint8_t ehp;
//	uint8_t ft;
//	uint8_t blood1;
//	uint8_t blood2;
//}SHORTorOVER_STA_t;

///**************判断设备脱落故障状态结构体*****************/
//typedef struct
//{
//	uint8_t ehp;
//	uint8_t ft;
//	uint8_t blood1;
//	uint8_t blood2;
//    uint8_t ex_ehp;//前一个脱落状态
//	uint8_t ex_ft;
//	uint8_t ex_blood1;
//	uint8_t ex_blood2;
//}EQUOFF_STA_t;

/**************设备栓锁报警的超时等参数结构体*****************/
typedef struct
{
	uint16_t break_timeout;
	uint16_t shorov_timeout;
	uint8_t break_reset_flag;
	uint8_t shorov_reset_flag;
}ALARM_Latch_t;

/**************判断设备是否报警的超时时间*************/
typedef struct
{
//	uint16_t htbk_uhtemp ; //升温毯的超高温超时 1分钟
//	uint16_t htbk_htemp ;  //升温毯的温度偏高判断超时 3分钟
//	uint16_t htbk_start_lowtemp ;    //升温毯开始运行判断温度偏低的超时10分钟 
//	uint16_t htbk_lowtemp ; 			   //升温毯判断温度偏低的累计超时3分钟 
//	uint16_t htbk_start_fault ; //升温毯开始运行判断故障的超时 5分钟
//	uint16_t htbk_fault ;   		//升温毯判断故障的累计超时 3分钟
	
	uint16_t blood1_uhtemp ; //输液管1的超高温超时 1分钟
	uint16_t blood1_htemp ;  //输液管1的温度偏高判断超时 3分钟 20220819改为1分钟
	uint16_t blood1_start_lowtemp ;    //输液管1开始运行判断温度偏低的超时10分钟 
	uint16_t blood1_lowtemp ; 			   //输液管1判断温度偏低的累计超时3分钟 
	uint16_t blood1_start_fault ; //输液管1开始运行判断故障的超时 5分钟
	uint16_t blood1_fault ;   		//输液管1判断故障的累计超时 3分钟
	
	uint16_t blood2_uhtemp ; //输液管2的超高温超时 1分钟
	uint16_t blood2_htemp ;  //输液管2的温度偏高判断超时 3分钟 20220819改为1min
	uint16_t blood2_start_lowtemp ;    //输液管2开始运行判断温度偏低的超时10分钟 
	uint16_t blood2_lowtemp ; 			   //输液管2判断温度偏低的累计超时3分钟 
	uint16_t blood2_start_fault ; //输液管2开始运行判断故障的超时 5分钟
	uint16_t blood2_fault ;   		//输液管2判断故障的累计超时 3分钟
	
//	uint16_t ehp_start_lowtemp;//电热垫开始运行温度偏低判断超时 10分钟 20220927
//	uint16_t ft_start_lowtemp;//足温垫开始运行温度偏低判断超时 10分钟 20220927
//	uint16_t ehp_lowtemp; //电热垫开始运行温度偏低判断超时 10分钟 20220927
//	uint16_t ft_lowtemp; 	//足温垫开始运行温度偏低判断超时 10分钟 20220927
//	uint16_t ehp_htemp; //20220819电热垫温度偏高报警改为持续1分钟
//	uint16_t ft_htemp; //20220819足温垫温度偏高报警改为持续1分钟
    
    uint16_t ArmBlanket1_htemp ;  //温度偏高判断超时 3分钟 20220819改为1min
	uint16_t ArmBlanket1_start_lowtemp ;    //开始运行判断温度偏低的超时10分钟 
	uint16_t ArmBlanket1_lowtemp ; 			//判断温度偏低的累计超时3分钟
    
    uint16_t ArmBlanket2_htemp ;  //温度偏高判断超时 3分钟 20220819改为1min
	uint16_t ArmBlanket2_start_lowtemp ;    //开始运行判断温度偏低的超时10分钟 
	uint16_t ArmBlanket2_lowtemp ; 			//判断温度偏低的累计超时3分钟
    
    uint16_t UpperBlanket_htemp ;  //温度偏高判断超时 3分钟 20220819改为1min
	uint16_t UpperBlanket_start_lowtemp ;    //开始运行判断温度偏低的超时10分钟 
	uint16_t UpperBlanket_lowtemp ; 			//判断温度偏低的累计超时3分钟
    
    uint16_t LowBlanket_htemp ;  //温度偏高判断超时 3分钟 20220819改为1min
	uint16_t LowBlanket_start_lowtemp ;    //开始运行判断温度偏低的超时10分钟 
	uint16_t LowBlanket_lowtemp ; 			//判断温度偏低的累计超时3分钟
    
    uint16_t FT1_htemp ;  //温度偏高判断超时 3分钟 20220819改为1min
	uint16_t FT1_start_lowtemp ;    //开始运行判断温度偏低的超时10分钟 
	uint16_t FT1_lowtemp ; 			//判断温度偏低的累计超时3分钟
    
    uint16_t FT2_htemp ;  //温度偏高判断超时 3分钟 20220819改为1min
	uint16_t FT2_start_lowtemp ;    //开始运行判断温度偏低的超时10分钟 
	uint16_t FT2_lowtemp ; 			//判断温度偏低的累计超时3分钟
    
}EQU_ALARM_TIMEOUT_t;


void ALARM_Thread(void *argument);
void alarm_silence_pro(void);
void htbk_fault_check(uint8_t data_t);
void alarm_suspend_pro(void);
void phy_alarm_send_lcd(void);
void equ_alarm_send_lcd(void);

#endif
/* [] END OF FILE */
